package testes;

import static org.junit.Assert.*;

import iscte.es.copaPaises.businessLayer.CalendarDate;
import iscte.es.copaPaises.businessLayer.Clube;
import iscte.es.copaPaises.businessLayer.Equipa;
import iscte.es.copaPaises.businessLayer.Jogador;
import iscte.es.copaPaises.businessLayer.Membro;
import iscte.es.copaPaises.businessLayer.Pais;
import iscte.es.copaPaises.businessLayer.Participacao;
import iscte.es.copaPaises.businessLayer.PosicaoJogador;

import java.util.HashSet;
import java.util.Set;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class JogadorTest {
	private Jogador j;
	private PosicaoJogador posicao;
	private Clube clube;
	private CalendarDate data_nascimento;
	private String nome;
	private Pais pais;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		j=new Jogador();
		posicao=PosicaoJogador.valueOf("Avancado");
		clube=new Clube();
		data_nascimento=new CalendarDate(23, 4, 1959);
		nome="ricardo carvalho";
		pais=new Pais();

	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testToString() {
		j=new Jogador(data_nascimento,nome,pais,posicao,clube);
		assertEquals(j.toString(),"Jogador [posicao=" + posicao + ", clube=" + clube + "]\n");
	}

	@Test
	public void testJogador() {
		assertTrue("Jogador()",Jogador.allInstances.contains(j));
	}

	@Test
	public void testJogadorCalendarDateStringPaisPosicaoJogadorClube() {
		j=new Jogador(data_nascimento,nome,pais,posicao,clube);
		assertTrue("Jogador(data_nascimento,nome,pais,posicao,clube)",Jogador.allInstances.contains(j));
	}

	@Test
	public void testPosicao() {
		posicao=PosicaoJogador.GuardaRedes;
		j.setPosicao(posicao);
		assertEquals("Setter/Getter Jogador.posicao()" ,j.posicao(),posicao);
	}

	@Test
	public void testClube() {
		j.setClube(clube);
		assertEquals("Setter/Getter Jogador.clube()" ,j.clube(),clube);
	}

	@Test
	public void testParticipacoes() {
		Participacao p1=new Participacao();
		Participacao p2=new Participacao();
		Set<Participacao> participacoes=new HashSet<Participacao>();
		participacoes.add(p2);
		participacoes.add(p1);
		j.setParticipacoes(participacoes);
		assertEquals("Setter/Getter Jogador.participacoes()",participacoes,j.participacoes());

	}

	@Test
	public void testMembro() {
		Membro m1=new Membro();
		Membro m2=new Membro();
		Membro m3=new Membro();
		Set<Membro> membros=new HashSet<Membro>();
		membros.add(m2);
		membros.add(m1);
		j.setMembro(membros);
		assertEquals("Setter/Getter Jogador.membro()",membros,j.membro());

	}

	@Test
	public void testEquipa() {
		Membro m3=new Membro();
		Membro m1=new Membro();
		Membro m2=new Membro();
		
		Equipa e1=new Equipa();
		Equipa e2=new Equipa();
		Set<Equipa> equipas=new HashSet<Equipa>();
		Set<Membro> membros=new HashSet<Membro>();

		membros.add(m1);membros.add(m2);
		j.setMembro(membros);
		
		equipas.add(e1);equipas.add(e2);
		j.setEquipa(equipas);
		
		assertEquals("Setter/Getter Jogador.equipa()",j.equipa(),equipas);

	}

	@Test
	public void testInicializaStringCalendarDatePosicaoJogadorPaisClube() {
		j.inicializa(nome, data_nascimento, posicao, pais, clube);
		assertEquals(nome,j.nome());
		assertEquals(data_nascimento,j.data_nascimento());
		assertEquals(posicao,j.posicao());
		assertEquals(pais,j.nacionalidade());
		assertEquals(clube,j.clube());
	}

	@Test
	public void testTransferencia() {
		assertNull(j.clube());
		j.transferencia(clube);
		assertEquals("Jogador.transferencia()",clube,j.clube());
	}

}
